// 全局变量
var currentSessionId = null;

// 页面加载完成后初始化
$(document).ready(function() {
    // 初始化工具提示
    var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'));
    var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
        return new bootstrap.Tooltip(tooltipTriggerEl);
    });

    // 侧边栏导航高亮
    highlightCurrentPage();

    // 移动端侧边栏切换
    setupMobileSidebar();

    // 初始化表格
    initTables();

    // 初始化上传组件
    initUpload();

    // 绑定事件
    bindEvents();
});

// 高亮当前页面
function highlightCurrentPage() {
    var currentPath = window.location.pathname;
    $('.sidebar .nav-link').removeClass('active');
    
    if (currentPath === '/') {
        $('.sidebar .nav-link[href="/"]').addClass('active');
    } else {
        $('.sidebar .nav-link[href="' + currentPath + '"]').addClass('active');
    }
}

// 设置移动端侧边栏
function setupMobileSidebar() {
    // 在小屏幕上隐藏侧边栏
    if ($(window).width() < 768) {
        $('.sidebar').removeClass('d-md-block');
    }

    // 窗口大小改变时处理
    $(window).resize(function() {
        if ($(window).width() < 768) {
            $('.sidebar').removeClass('d-md-block');
        } else {
            $('.sidebar').addClass('d-md-block');
        }
    });
}

// 显示加载状态
function showLoading(element) {
    $(element).prop('disabled', true);
    $(element).html('<span class="spinner-border spinner-border-sm me-2"></span> 加载中...');
}

// 隐藏加载状态
function hideLoading(element, originalText) {
    $(element).prop('disabled', false);
    $(element).html(originalText);
}

// 显示成功消息
function showSuccess(message) {
    showAlert('success', message);
}

// 显示错误消息
function showError(message) {
    showAlert('danger', message);
}

// 显示警告消息
function showWarning(message) {
    showAlert('warning', message);
}

// 显示信息消息
function showInfo(message) {
    showAlert('info', message);
}

// 显示警告框
function showAlert(type, message) {
    var alertHtml = `
        <div class="alert alert-${type} alert-dismissible fade show" role="alert">
            ${message}
            <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
        </div>
    `;
    
    // 在页面顶部显示警告
    $('main').prepend(alertHtml);
    
    // 3秒后自动消失
    setTimeout(function() {
        $('.alert').fadeOut();
    }, 3000);
}

// 格式化文件大小
function formatFileSize(bytes) {
    if (bytes === 0) return '0 Bytes';
    const k = 1024;
    const sizes = ['Bytes', 'KB', 'MB', 'GB'];
    const i = Math.floor(Math.log(bytes) / Math.log(k));
    return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
}

// 格式化日期
function formatDate(dateString) {
    const date = new Date(dateString);
    return date.toLocaleString('zh-CN');
}

// 防抖函数
function debounce(func, wait) {
    let timeout;
    return function executedFunction(...args) {
        const later = () => {
            clearTimeout(timeout);
            func(...args);
        };
        clearTimeout(timeout);
        timeout = setTimeout(later, wait);
    };
}

// 节流函数
function throttle(func, limit) {
    let inThrottle;
    return function() {
        const args = arguments;
        const context = this;
        if (!inThrottle) {
            func.apply(context, args);
            inThrottle = true;
            setTimeout(() => inThrottle = false, limit);
        }
    }
}

// 复制到剪贴板
function copyToClipboard(text) {
    navigator.clipboard.writeText(text).then(function() {
        showSuccess('已复制到剪贴板');
    }, function(err) {
        showError('复制失败');
    });
}

// 确认对话框
function confirmAction(message, callback) {
    if (confirm(message)) {
        callback();
    }
}

// 获取URL参数
function getUrlParameter(name) {
    name = name.replace(/[\[]/, '\\[').replace(/[\]]/, '\\]');
    var regex = new RegExp('[\\?&]' + name + '=([^&#]*)');
    var results = regex.exec(location.search);
    return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
}

// 设置URL参数
function setUrlParameter(name, value) {
    var url = new URL(window.location);
    url.searchParams.set(name, value);
    window.history.replaceState({}, '', url);
}

// 移除URL参数
function removeUrlParameter(name) {
    var url = new URL(window.location);
    url.searchParams.delete(name);
    window.history.replaceState({}, '', url);
}

// 初始化表格
function initTables() {
    // 文档列表表格
    if ($('#documentTable').length > 0) {
        loadDocuments();
    }
    
    // 会话列表表格
    if ($('#sessionTable').length > 0) {
        loadSessions();
    }
}

// 加载文档列表
function loadDocuments() {
    $.ajax({
        url: '/api/document/list',
        method: 'GET',
        success: function(response) {
            if (response.success) {
                displayDocuments(response.data);
            } else {
                showError('加载文档失败：' + response.message);
            }
        },
        error: function() {
            showError('加载文档失败，请检查网络连接');
        }
    });
}

// 显示文档列表
function displayDocuments(documents) {
    const tbody = $('#documentTable tbody');
    tbody.empty();

    if (documents.length === 0) {
        tbody.append('<tr><td colspan="7" class="text-center">暂无文档</td></tr>');
        return;
    }

    documents.forEach(function(doc) {
        const row = `
            <tr>
                <td>${doc.id}</td>
                <td>${doc.title}</td>
                <td>${doc.fileType}</td>
                <td>${formatFileSize(doc.fileSize)}</td>
                <td>
                    <span class="badge bg-${getStatusClass(doc.status)}">
                        ${getStatusText(doc.status)}
                    </span>
                </td>
                <td>${formatDate(doc.createdAt)}</td>
                <td>
                    <button class="btn btn-sm btn-info me-1" onclick="viewDocument(${doc.id})" title="查看">
                        <i class="fas fa-eye"></i>
                    </button>
                    <button class="btn btn-sm btn-warning me-1" onclick="editDocument(${doc.id})" title="编辑">
                        <i class="fas fa-edit"></i>
                    </button>
                    <button class="btn btn-sm btn-danger" onclick="deleteDocument(${doc.id})" title="删除">
                        <i class="fas fa-trash"></i>
                    </button>
                </td>
            </tr>
        `;
        tbody.append(row);
    });
}

// 初始化上传组件
function initUpload() {
    if ($('#documentUpload').length > 0) {
        $('#documentUpload').on('change', function() {
            var files = this.files;
            if (files.length > 0) {
                uploadFiles(files);
            }
        });
    }
}

// 上传文件
function uploadFiles(files) {
    var formData = new FormData();
    for (var i = 0; i < files.length; i++) {
        formData.append('files', files[i]);
    }

    $.ajax({
        url: '/api/document/upload',
        type: 'POST',
        data: formData,
        processData: false,
        contentType: false,
        success: function(response) {
            if (response.success) {
                showSuccess('上传成功');
                loadDocuments(); // 刷新表格
            } else {
                showError('上传失败：' + response.message);
            }
        },
        error: function() {
            showError('上传失败，请检查网络连接');
        }
    });
}

// 绑定事件
function bindEvents() {
    // 文档操作事件
    $(document).on('click', '.btn-info', function() {
        var docId = $(this).data('id');
        viewDocument(docId);
    });

    $(document).on('click', '.btn-warning', function() {
        var docId = $(this).data('id');
        editDocument(docId);
    });

    $(document).on('click', '.btn-danger', function() {
        var docId = $(this).data('id');
        deleteDocument(docId);
    });
}

// 编辑文档
function editDocument(id) {
    // 打开编辑模态框
    $('#editDocumentModal').modal('show');
    // 加载文档数据
    $.get('/api/document/' + id, function(response) {
        if (response.success) {
            $('#editDocumentForm input[name="title"]').val(response.data.title);
            $('#editDocumentForm input[name="description"]').val(response.data.description);
            $('#editDocumentForm').data('id', id);
        }
    });
}

// 删除文档
function deleteDocument(id) {
    if (confirm('确定要删除这个文档吗？')) {
        $.ajax({
            url: '/api/document/' + id,
            type: 'DELETE',
            success: function(response) {
                if (response.success) {
                    showSuccess('删除成功');
                    loadDocuments();
                } else {
                    showError('删除失败：' + response.message);
                }
            },
            error: function() {
                showError('删除失败，请检查网络连接');
            }
        });
    }
}

// 处理文档
function processDocument(id) {
    showLoading('#processBtn_' + id);
    $.ajax({
        url: '/api/document/' + id + '/process',
        type: 'POST',
        success: function(response) {
            hideLoading('#processBtn_' + id, '处理');
            if (response.success) {
                showSuccess('处理成功');
                loadDocuments();
            } else {
                showError('处理失败：' + response.message);
            }
        },
        error: function() {
            hideLoading('#processBtn_' + id, '处理');
            showError('处理失败，请检查网络连接');
        }
    });
}

// 打开聊天
function openChat(sessionId) {
    currentSessionId = sessionId;
    window.open('/Home/Chat?sessionId=' + sessionId, '_blank');
}

// 删除会话
function deleteSession(id) {
    if (confirm('确定要删除这个会话吗？')) {
        $.ajax({
            url: '/api/qa/sessions/' + id,
            type: 'DELETE',
            success: function(response) {
                if (response.success) {
                    showSuccess('删除成功');
                    loadSessions();
                } else {
                    showError('删除失败：' + response.message);
                }
            },
            error: function() {
                showError('删除失败，请检查网络连接');
            }
        });
    }
}

// 发送消息
function sendMessage() {
    var message = $('#messageInput').val().trim();
    if (!message) {
        showWarning('请输入消息内容');
        return;
    }
    
    if (!currentSessionId) {
        showWarning('请先选择或创建会话');
        return;
    }
    
    // 显示用户消息
    addMessage('user', message);
    $('#messageInput').val('');
    
    // 显示加载状态
    var loadingId = addLoadingMessage();
    
    // 发送请求
    $.ajax({
        url: '/api/qa/chat',
        type: 'POST',
        contentType: 'application/json',
        data: JSON.stringify({
            sessionId: currentSessionId,
            message: message
        }),
        success: function(response) {
            // 移除加载状态
            $('#' + loadingId).remove();
            
            if (response.success) {
                addMessage('assistant', response.data.content);
            } else {
                addMessage('assistant', '抱歉，我遇到了一些问题：' + response.message);
            }
        },
        error: function() {
            $('#' + loadingId).remove();
            addMessage('assistant', '抱歉，网络连接出现问题');
        }
    });
}

// 添加消息
function addMessage(type, content) {
    var messageHtml = `
        <div class="message ${type}">
            <div class="message-content">${content}</div>
            <div class="message-time">${new Date().toLocaleTimeString()}</div>
        </div>
    `;
    $('.chat-messages').append(messageHtml);
    scrollToBottom();
}

// 添加加载消息
function addLoadingMessage() {
    var loadingId = 'loading-' + Date.now();
    var loadingHtml = `
        <div class="message assistant" id="${loadingId}">
            <div class="message-content">
                <div class="spinner-border spinner-border-sm me-2"></div>
                <span>正在思考...</span>
            </div>
        </div>
    `;
    $('.chat-messages').append(loadingHtml);
    scrollToBottom();
    return loadingId;
}

// 滚动到底部
function scrollToBottom() {
    var container = $('.chat-messages');
    container.scrollTop(container[0].scrollHeight);
}

// 创建新会话
function createSession() {
    var title = prompt('请输入会话标题');
    if (title) {
        $.ajax({
            url: '/api/qa/sessions',
            type: 'POST',
            contentType: 'application/json',
            data: JSON.stringify({
                title: title,
                description: ''
            }),
            success: function(response) {
                if (response.success) {
                    showSuccess('会话创建成功');
                    openChat(response.data.id);
                } else {
                    showError('创建失败：' + response.message);
                }
            },
            error: function() {
                showError('创建失败，请检查网络连接');
            }
        });
    }
}

// 格式化文件大小
function formatFileSize(bytes) {
    if (bytes === 0) return '0 B';
    var k = 1024;
    var sizes = ['B', 'KB', 'MB', 'GB'];
    var i = Math.floor(Math.log(bytes) / Math.log(k));
    return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
}

// 格式化时间
function formatDateTime(dateTime) {
    var date = new Date(dateTime);
    return date.toLocaleString('zh-CN');
}

// 获取状态样式类
function getStatusClass(status) {
    switch (status.toLowerCase()) {
        case 'pending': return 'warning';
        case 'processing': return 'info';
        case 'completed': return 'success';
        case 'failed': return 'danger';
        default: return 'secondary';
    }
}

// 获取状态文本
function getStatusText(status) {
    switch (status.toLowerCase()) {
        case 'pending': return '待处理';
        case 'processing': return '处理中';
        case 'completed': return '已完成';
        case 'failed': return '失败';
        default: return '未知';
    }
}

// 获取文件类型图标
function getFileTypeIcon(fileType) {
    switch (fileType.toLowerCase()) {
        case '.pdf': return '<i class="fas fa-file-pdf text-danger"></i>';
        case '.docx':
        case '.doc': return '<i class="fas fa-file-word text-primary"></i>';
        case '.xlsx':
        case '.xls': return '<i class="fas fa-file-excel text-success"></i>';
        default: return '<i class="fas fa-file-alt text-secondary"></i>';
    }
} 